﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace VigenereCiper.Models
{
    /// <summary>
    /// 维吉尼亚密文形成
    /// </summary>
    public class Vigenere
    {
        public string Encrypt(string Plain, string Key)
        {
            //将明文、密钥分别存入一维数组
            char[] plain = Plain.ToCharArray();
            int n = Plain.Length;
            char[] key = Key.ToCharArray();
            char[] ciper = new char[n];
            //计算每一位密文是字母表中的第几个并存入ciper数组中
            for (int i = 0; i < n; i++)
            {
                //j记录用密文中的第几个字母加密
                int j = (i%key.Length);
                //p、k记录当前plaintext、key中的字母是字母表中的第几个
                int p = plain[i]-'a';
                int k = key[j]-'a';
                //add表示此位密文是字母表中第几个
                int add = (p+k)%26;
                int c = 'a'+add;
                ciper[i]= Convert.ToChar(c);
            }
            return new String(ciper);
        }
    }
}
